package grupobbva.pe.operhc.service;

import grupobbva.pe.operhc.domain.Canal;
import grupobbva.pe.operhc.domain.Cliente;
import grupobbva.pe.operhc.domain.ConfigProducto;
import grupobbva.pe.operhc.domain.Contrato;
import grupobbva.pe.operhc.domain.EmisoraConfigProd;
import grupobbva.pe.operhc.domain.Ingreso;
import grupobbva.pe.operhc.domain.LogDataLoad;
import grupobbva.pe.operhc.domain.Mensaje;
import grupobbva.pe.operhc.domain.Parametro;
import grupobbva.pe.operhc.domain.PerfilRol;
import grupobbva.pe.operhc.domain.Plazo;
import grupobbva.pe.operhc.domain.Producto;
import grupobbva.pe.operhc.domain.ProductoPlazo;
import grupobbva.pe.operhc.domain.SegParametros;
import grupobbva.pe.operhc.domain.SegUsuario;
import grupobbva.pe.operhc.domain.Segmento;
import grupobbva.pe.operhc.domain.SegmentoConfigProd;
import grupobbva.pe.operhc.domain.SubCanal;
import grupobbva.pe.operhc.domain.SubProducto;
import grupobbva.pe.operhc.domain.Tabla;
import grupobbva.pe.operhc.domain.TipoParametro;
import grupobbva.pe.operhc.util.ReadProperties;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface ParametroService {

	/**********************************************
	 * @author frank.ayala
	 * INI MANTENIMIENTOS
	 **********************************************/
	
	public List<SegUsuario> getAllUsers();
	public List<SegParametros> getListUsersType();
	public List<SegParametros> getListOptions();
	public SegUsuario getUserByCode(String id, String nivel);
	public List<SegParametros> getListUserOptions(String id);
	public void deleteUsersByCode(String concatIds) throws Exception;
	public boolean verifyUserUniquePK(String codigo);
	public void saveUser(SegUsuario bean, boolean isNew) throws Exception;
	public List<Parametro> getAllParameters();
	public List<Ingreso> getAllIncome();
	public Map<String, String> calculoLimite(String cuota, String plazo, String tasa) throws Exception;
	public Map<String, String> calculoCuota(String limiteAjust, String plazo, String tasa) throws Exception;
	public List<SubProducto> getAllSubproductos(String codConfigProducto, String codProductoPadre);
	public void deleteSubProductsByCode(String codes, String codProductoPadre, String codConfigProducto) throws Exception;
	public List<Producto> getAllProducts();
	public Producto getProductByCode(String codProducto, String nivel);
	public boolean saveAdminParameters(String[] valburo, String[] clasifbbva,
	String[] valse, String[] clasifsf, String[] valrp, String allSegmentos);
	public Map<String, String> saveAdminIncomes(List<Ingreso> listIngreso);
	public List<Ingreso> refreshListIncome(List<Ingreso> list);
	public void deleteProductsByCode(String codes) throws Exception;
	public Map<String, String> saveProduct(String codProductoHdn, String codProducto,
			String desProducto, String stMultCont, String stNivela, String familia, String stContrata, String stSimula);
	public List<ConfigProducto> getAllConfigProducts(String codProductoPadre);
	public ConfigProducto getConfigProductByCode(String codConfigProducto, String codProductoPadre);
	public Map<String, String> saveConfigProduct(String codConfigProductoHdn,
			String codConfigProducto, String desConfigProducto,
			String codProductoPadre, Long valPrioridad);
	public void deleteConfigProductsByCode(String codes,
			String codProductoPadre) throws Exception;
	public List<EmisoraConfigProd> getAllEmisorasConfigProd(
			String codConfigProducto, String codProductoPadre);
	public List<SegmentoConfigProd> getAllSegmentosConfigProd(
			String codConfigProducto, String codProductoPadre);
	public Map<String, String> saveEmisora(String codConfigProductoHdn,
			String codEmisoraHdn, String codEmisora, String desEmisora, String seleccionEmisora);
	public Map<String, String> saveSegmento(String codConfigProductoHdn,
			String codSegmentoHdn, String codSegmento, String desSegmento, String seleccionSegmento);
	public void deleteEmisorasByCode(String concatIds, String codProductoPadre,
			String codConfigProducto) throws Exception;
	public void deleteSegmentosByCode(String concatIds,
			String codProductoPadre, String codConfigProducto) throws Exception;
	public Map<String, String> saveSubProduct(String codConfigProductoHdn,
			String codSubProducto, String desSubProducto, String valTasa, String valTipo, 
			String valBin, BigDecimal rangoMin, BigDecimal rangoMax, Long idSubProducto, String divisa);
	public void saveConfigProductDetail(String stRiesgo, String codConfigProducto, String allEmisoras, String allSegmentos);
	public List<Plazo> getAllPlazos();
	public Map<String, String> savePlazo(String codPlazoHdn, String codPlazo, String desPlazo);
	public void deletePlazosByCode(String concatIds)throws Exception;
	public List<ProductoPlazo> getAllConfigProductPlazo(String codProductoPadre);
	public Map<String, Object> getAllStructureProducts(Cliente clienteSession, List<Contrato> listContrato, String familiaMostrar);
	public String getValParameterByCode(String codParametro, String codTipoParametro);
	public Map<String, String> saveCheckEmisoras(String selEmisoras, String codConfigProducto);
	public Map<String, String> saveCheckSegmentos(String selSegmentos, String codConfigProducto);
	public Map<String, String> saveCheckProducts(String selNivela, String selMultCont, String selContrata, String selSimula);
	public Map<String, String> saveCheckProductoPlazos(String selPlazo, String codProductoPadre);
	public void saveAllCheckEmisoraSegmento(String allEmisoras,	String allSegmentos, String codConfigProducto, String codProductoPadre);
	public Map<String, Object> verifyIsValidClient(Cliente bean, ReadProperties readProperties);
	//public BigDecimal calculateQuotaByIncomes(BigDecimal ingresoFijo, BigDecimal ingresoVariable);
	public List<Producto> redistributeQuotas(List<Producto> listaProductos);
	public BigDecimal calculateNewQuotaByIncomes(BigDecimal ingresoFijo, BigDecimal ingresoVariable, BigDecimal ingresoEstimado, BigDecimal cuotaAnterior);
	public Map<String, Object> filtrarProductos(String indicatorInitial, List<String[]> listParam, 
	List<SubProducto> listSession, Map<String,SubProducto> mapSession, String indicatorSelect, Cliente cliente) throws Exception;
	public List<Contrato> getProductExtraInfoByContrato(List<Contrato> list);
	public List<Segmento> getAllSegmentosAdmin();
	public Map<String, String> saveSegmentoAdmin(String codSegmentoHdn,
			String codSegmento, String desSegmento, String seleccion);
	public void deleteSegmentosAdminByCode(String concatIds) throws Exception;
	public void saveAllCheckSegmentoAdmin();
	public Map<String, String> saveCheckSegmentosAdmin(String selSegmentos);
	public List<Canal> getAllCanales();
	public Map<String, String> saveCanal(String codCanalHdn, String codCanal,	String desCanal);
	public void deleteCanalesByCode(String concatIds)throws Exception;
	public List<SubCanal> getAllSubCanales(String codCanal);
	public Map<String, String> saveSubCanal(String codSubCanalHdn,
			String codSubCanal, String desSubCanal, String codCanal);
	public void deleteSubCanalesByCode(String codes, String codCanal)throws Exception;
	public Canal getCanalByCode(String codCanal);
	public SubCanal getSubCanalByCode(String codSubCanal, String codCanal);
	public Map<String, String> getMapParametersByParameterType(String codTipoParametro);
	
	public String getSubGerenteByUsuario(String codUsuario);
	public String getNombreCompletoByUsuario(String codUsuario);
	public Parametro getParameterByCodes(String codParametro, String codTipoParametro);
	public List<Parametro> getParametersByParameterType(String codTipoParametro);
	public List<TipoParametro> getAllTypeParameters();
	public void deleteParametersByCode(String codes, String codTipoParametro)throws Exception;
	public boolean verifyParameterUniquePK(String codParametro,
			String codTipoParametroPadre);
	public void saveParameter(Parametro bean, boolean isNew) throws Exception;
	
	/**********************************************
	 * @author frank.ayala
	 * FIN MANTENIMIENTOS
	 **********************************************/
	public Segmento getSegmentoByCode(String codSegmento);
	
	//ini MCG20140716
	public List<Mensaje> getAllMensaje();
	public Map<String, String> saveMensaje(String codMensajeHdn, String codMensaje, String desMensaje,String activo);
	public void deleteMensajeByCode(String concatIds)throws Exception;
	public Mensaje getMensajeByCode(String codMensaje) throws Exception;
	
	public List<Tabla> getListRoles();
	public List<Tabla> getListPerfilRoles(String id);
	public List<Tabla> getListPerilesLocal();
	
	public void savePerfilRol(PerfilRol bean) throws Exception;
	public List<LogDataLoad> getAllLogDataLoad();
	public void deleteLogDataLoadByCode(String concatIds) throws Exception;
	//fin MCG20140716
	
	
}